﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Entidades.Seguridad;
using Entidades.Sistema.Base;
using Entidades.Sistema.Venta;
using Entidades.Sistema.Produccion;
using Modelo.Sistema.Produccion;
using Modelo.Sistema.Venta;

namespace VistaOnlineR1._1.Controllers.Sistema.Produccion
{
    [Authorize(Roles = "Produccion, Administracion")]
    public class InsumoController : BaseController
    {
        #region campos
        CatalogoInsumo _catalogoInsumo;
        CatalogoUnidad _catalogoUnidad;

        #endregion 

        #region Constructors
        public InsumoController()
            : this(new CatalogoInsumo(), new CatalogoUnidad())
        {
        }

        public InsumoController(CatalogoInsumo catalogoInsumo,CatalogoUnidad catalogoUnidad)
        {            
            _catalogoInsumo = catalogoInsumo;
            _catalogoUnidad = catalogoUnidad;
        }
        #endregion

        public ActionResult Index()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            ViewBag.Unidad = _catalogoUnidad.ListarUnidad();

            return View(_catalogoInsumo.ListarInsumos());
        }

        [ValidateInput(false)]
        public ActionResult EditInsumoPartial()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            ViewBag.Unidad = _catalogoUnidad.ListarUnidad();

            return PartialView("EditInsumoPartial", _catalogoInsumo.ListarInsumos());
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult EditInsumoUpdatePartial(Insumo insumo)
        {
            ViewBag.Unidad = _catalogoUnidad.ListarUnidad();

            int IdUnidadMedida = String.IsNullOrEmpty(Request.Params["IdUnidadMedida"]) ? -1 : int.Parse(Request.Params["IdUnidadMedida_VI"]);

            if (IdUnidadMedida != -1)
            { insumo.UnidadDeMedida = _catalogoUnidad.BuscarUnidad(IdUnidadMedida); }
            else { ModelState.AddModelError(null, "Seleccione Unidad"); }

            if (ModelState.IsValid)
            {
                try
                {
                    _catalogoInsumo.ModificarInsumo(insumo);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            return PartialView("EditInsumoPartial", _catalogoInsumo.ListarInsumos());
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult EditInsumoDeletePartial(int IdInsumo)
        {
            if (IdInsumo >= 0)
            {
                try
                {
                    _catalogoInsumo.EliminarInsumo(_catalogoInsumo.BuscarInsumo(IdInsumo));
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            ViewBag.Unidad = _catalogoUnidad.ListarUnidad();

            return PartialView("EditInsumoPartial", _catalogoInsumo.ListarInsumos());
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult EditInsumoAddNewPartial(Insumo insumo)
        {
            ViewBag.Unidad = _catalogoUnidad.ListarUnidad();

            int IdUnidadMedida = String.IsNullOrEmpty(Request.Params["IdUnidadMedida"]) ? -1 : int.Parse(Request.Params["IdUnidadMedida_VI"]);

            if (IdUnidadMedida != -1)
            { insumo.UnidadDeMedida = _catalogoUnidad.BuscarUnidad(IdUnidadMedida); }
            else { ModelState.AddModelError(null, "Seleccione Unidad"); }

            if (ModelState.IsValid)
            {
                try
                {
                    _catalogoInsumo.AgregarInsumo(insumo);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            return PartialView("EditInsumoPartial", _catalogoInsumo.ListarInsumos());
        }
    }
}
